/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Control;

import java.util.ArrayList;

/**
 *
 * @author Leonardo Bohórquez
 */
public class Operaciones {

    private static Operaciones operaciones = null;

    private Operaciones() {
    }

    public static synchronized Operaciones getInstance() {
        if (operaciones == null) {
            operaciones = new Operaciones();
        }
        return operaciones;
    }

    /**
     *
     * @param operacion La operación definida en {@link Control.Constantes}
     * @param numeros
     * @return
     * @throws ArithmeticException
     */
    public Double ejecutar(int operacion, ArrayList<Double> numeros) throws ArithmeticException {
        Double a = numeros.get(0);
        Double b = numeros.get(1);
        switch (operacion) {
            case Constantes.SUMA:
                return suma(a, b);
            case Constantes.RESTA:
                return resta(a, b);
            case Constantes.MULTIPLICACION:
                return producto(a, b);
            case Constantes.DIVISION:
                return validarCoc(a, b);
        }
        return 0.;
    }

    public Double suma(Double a, Double b) {
        return a + b;
    }

    public Double resta(Double a, Double b) {
        return a - b;
    }

    public Double producto(Double a, Double b) {
        return a * b;
    }

    public Double cociente(Double a, Double b) {
        return a / b;
    }

    private Double validarCoc(Double a, Double b) throws ArithmeticException{
        if(b==0.){
            throw new ArithmeticException("No se puede dividir entre 0");
        }else{
            return cociente(a, b);
        }
    }
}
